#include <iostream>

using std::cout;
using std::endl;

void test0()
{
    int a = 1;
    //[] 捕获列表，捕获外部局部变量
    //() 函数的参数列表
    //{} 函数的函数体
    //函数的返回类型在){之间
    /* [a](int value)->void{ */ 
    [a](int value){ 
        cout << "value = " << value << endl; 
        cout << "a = " << a << endl; 
    }(100);
}

void test()
{
    int a = 1;
    //值捕获：只能进行读操作(如果想修改，可以使用mutable进行
    //修饰)，传递的是拷贝（副本）
    //引用捕获：可以对捕获的变量进行写操作，传递的是引用
    [a](int value)mutable{ 
        ++value;
        cout << "value = " << value << endl; 
        ++a;
        cout << "a = " << a << endl; 
    }(100);

    cout << "out a = " << a << endl;
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

